module utils.RespData;

import vibe.data.json : Json, serializeToJson, parseJsonString;

/** 
 * 封装响应数据类
 */
class RespData
{

    /** 
     * 构造响应数据
     * Params:
     *   code  =   `uint `   自定义响应码
     * Returns: Json
     */
    public static Json newData (uint code)
    {
        Json respData = Json.emptyObject;
        respData["code"] = code;
        respData["msg"] = "";
        respData["data"] = null;

        return respData;
    }

    /** 
     * 构造响应数据
     * Params:
     *   code  =  `uint `   自定义响应码
     *   msg  =  `string`    自定义响应信息
     * Returns: Json
     */
    public static Json newData (uint code, string msg)
    {
        Json respData = Json.emptyObject;
        respData["code"] = code;
        respData["msg"] = msg;
        respData["data"] = null;

        return respData;
    }

    /** 
     * 构造响应数据
     * Params:
     *   code  =  `uint`    自定义响应码
     *   msg   =  `string `   自定义响应信息
     *   data   =  `T`    自定义响应数据
     * Returns: Json
     */
    public static Json newData (T)(uint code, string msg, T data)
    {
        Json respData = Json.emptyObject;
        respData["code"] = code;
        respData["msg"] = msg;
        respData["data"] = serializeToJson!T(data);

        return respData;
    }

    /** 
     * 构造响应数据
     * Params:
     *   code  =  `uint`    自定义响应码
     *   msg  =  `string`    自定义响应信息
     *   data  =  `string`   string型json格式数据
     * Returns: Json
     */
    public static Json newData (uint code, string msg, string jsonStr)
    {
        Json respData = Json.emptyObject;
        respData["code"] = code;
        respData["msg"] = msg;
        respData["data"] = parseJsonString(jsonStr);

        return respData;
    }

    /** 
     * 构造响应数据
     * Params:
     *   code  =  `uint`    自定义响应码
     *   msg  =  `string `   自定义响应信息
     *   data  =  `Json`   Json格式数据
     * Returns: Json
     */
    public static Json newData (uint code, string msg, Json data)
    {
        Json respData = Json.emptyObject;
        respData["code"] = code;
        respData["msg"] = msg;
        respData["data"] = data;

        return respData;
    }
}
